<?php 

/**
 * Отображение списка объектов.
 * Если соответствующие поля есть в справочнике.
 * страница принимает параметры departmentid, status,
 * по необходимости, могут быть другие,
 * специфичные для справочника. Если они переданы,
 * то выводится не весь список, а только его часть,
 * удовлетворяющая условию.
 * Параметры limitfrom и limitnum предназначены для ограничения количества
 * выводимых записей. Если limitnum задан, то внизу выводится указатель страниц.
 * Сам указатель страниц должен быть реализован в виде метода в плагине
 * modlib widgets, которому передаются значения $code (код плагина im для ссылки),
 * $adds, $vars, $limitfrom, $limitnum и $count,
 * на основании которых возвращается html-код указателя.
 * Ссылки генерируются с помощью $DOF->url_im().
 * Если для этого типа записей предусмотрен поиск,
 * то форма поиска отображается над списком.
 * Для результатов поиска действуют те же фильтры, что и для вывода списка.
 */

// Подключаем библиотеки
require_once('lib.php');
require_once('form.php');
// создаем объект, который будет содержать будущие условия выборки
$conds = new object();
// id учебного подразделения в таблице departmrnts
//выводятся классы с любым departmentid, если ничего не передано
$conds->departmentid = optional_param('departmentid', null, PARAM_INT);
//
$conds->plugintype   = required_param('plugintype', PARAM_TEXT);
$conds->plugincode   = required_param('plugincode', PARAM_TEXT);
$conds->code         = required_param('code', PARAM_TEXT);
// статус учебного периода. Выводятся периоды
// с любым статусом, если ничего не передано
$conds->status       = optional_param('status', '', PARAM_ALPHA);
// ловим номер страницы, если его передали
// какое количество строк таблицы выводить на экран
$limitnum = $DOF->modlib('widgets')->get_limitnum_bydefault();
$limitnum     = optional_param('limitnum', $limitnum, PARAM_INT);
// начиная с какого номера записи показывать ее
$limitfrom    = optional_param('limitfrom', '1', PARAM_INT);
$sort = optional_param('sort','', PARAM_ALPHA);
//добавление уровня навигации
// TODO раньше тут чтояло $conds
$DOF->modlib('nvg')->add_level($DOF->get_string('title', 'reports'), $DOF->url_im('reports','/list.php'),$addvars);
$customdata->dof  = $DOF;
$customdata->departmentid = $addvars['departmentid'];
$customdata->type = $conds->plugintype.'_'.$conds->plugincode.'_'.$conds->code;
//выводим форму выбора даты
$depchoose = new dof_im_journal_report_form($DOF->url_im('reports','/list.php',
        $addvars), $customdata);


        $dispay = new dof_im_reports_display($DOF,$conds->departmentid,$addvars);
        $reportcl = $dispay->report($conds->plugintype,$conds->plugincode,$conds->code);
        if ( $depchoose->is_submitted() AND confirm_sesskey() AND $formdata = $depchoose->get_data() )
            {// формируем данные для отчета
            $reportdata = new object();
            $reportdata->begindate    = $formdata->begindate;
            $reportdata->enddate      = $formdata->enddate;
            $reportdata->crondate     = $formdata->crondate;
            $reportdata->personid     = $DOF->storage('persons')->get_by_moodleid_id();
            $reportdata->departmentid = $addvars['departmentid'];
            $reportdata->objectid     = $addvars['departmentid'];
            $reportcl->save($reportdata);
}

//вывод на экран
            //печать шапки страницы
            $DOF->modlib('nvg')->print_header(NVG_MODE_PORTAL);

            //получаем список групп
            // массивы в PHP нумеруются с нуля, а наши страницы - с 1,
            //поэтому от стартового значения отнимем единицу.
            // подключаем класс для вывода страниц
            $pages = $DOF->modlib('widgets')->pages_navigation('reports',null,$limitnum, $limitfrom);
            $list = $DOF->storage('reports')->get_listing($conds,$pages->get_current_limitfrom()-1,
                $pages->get_current_limitnum(),$sort);


                if ( $DOF->storage('reports')->is_access('request_report') )
                {//проверяем полномочия на заказ отчета
                $depchoose->display();
}

                // получаем html-код таблицы с группами
                $reports = $dispay->get_table_list($list);

                //покажем ссылку на создание новой группы
                /*if ( $DOF->im('agroups')->is_access('addagroup') )
                {// если есть право создавать группу
                if ( $DOF->storage('config')->get_limitobject('agroups',$conds->departmentid) )
                {
                $link = '<a href='.$DOF->url_im('agroups','/edit.php',$addvars).'>'.$DOF->get_string('newagroup', 'agroups').'</a>';
                echo '<br>'.$link.'<br>';
}else
{
                $link =  '<span style="color:silver;">'.$DOF->get_string('newagroup', 'agroups').
                ' ('.$DOF->get_string('limit_message','agroups').')</span>';
                echo '<br>'.$link.'<br>';
                }

                }*/

                if ( ! $reports )
                {// не найдено ни одной группы
                    print('<p align="center">(<i>'.$DOF->
                            get_string('no_agroups_found', 'agroups').'</i>)</p>');
                }else
                {//есть группы
                    // выводим таблицу с учебными группами
                    echo '<br>'.$reports;

                    // помещаем в массив все параметры страницы,
                    //чтобы навигация по списку проходила корректно
                    $vars = array('limitnum'  => $pages->get_current_limitnum(),
                    'limitfrom' => $pages->get_current_limitfrom(),
                    'sort'      => $sort,);

                    // добавляем все необходимые условия фильтрации
                    $vars = array_merge($vars, (array)$conds);
                        // составим запрос для извлечения количества записей
                        $selectlisting = $DOF->storage('reports')->get_select_listing($conds);
    // посчитаем общее количество записей, которые нужно извлечь
    $pages->count = $DOF->storage('reports')->count_records_select($selectlisting);
    // выводим строку со списком страниц
    $pagesstring = $pages->get_navpages_list('/list.php', $vars);
    if ( $pagesstring )
    {// если выводим строку со списком страниц, то выводим и надпись "страницы"
        print '<p align="center"><b>'.$DOF->get_string('pages', 'agroups').':</b><br>'.
        $pagesstring.'</p>';
    }
}
//печать подвала
$DOF->modlib('nvg')->print_footer(NVG_MODE_PORTAL);


?>